﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using Biciq.Datos;
using System.Linq;

namespace Biciq.Silverlight.UI
{
    public class SeguimientoClienteVistaModelo:VistaModeloBase
    {

        #region Constructores
        /// <summary>
        /// Metodo que muestra el seguimiento de clientes.
        /// </summary>
        public SeguimientoClienteVistaModelo()
        {
            MostrarBuscarCliente = Visibility.Visible;
            InicializarMensajesError();
        }
        /// <summary>
        /// Metodo para el seguimiento de cliente 
        /// </summary>
        /// <param name="idCliente"></param>
        public SeguimientoClienteVistaModelo(Guid idCliente)
        {
            MostrarBuscarCliente = Visibility.Collapsed;
            IdCliente = idCliente;
            InicializarMensajesError();
            Buscar();
        }
        #endregion
        
        #region Campos
        private Visibility _mostrarBuscarCliente;
        private Guid _idCliente;
        private ObservableCollection<VistaHistoriaCliente> _historia;
        private string _nombre;
        private string _identificacion;
        private string _email;
        private string _telefono;
        private string _celular;
        private int _numeroUsos;
        private int _totalMinutos;
        private decimal _totalKilometros;
        private int _totalSanciones;

        public int TotalSanciones
        {
            get { return _totalSanciones; }
            set 
            { 
                _totalSanciones = value;
                RaisePropertyChanged("TotalSanciones");
            }
        }

       

        

        #endregion

        #region Propiedades


        public decimal TotalKilometros
        {
            get { return _totalKilometros; }
            set 
            { 
                _totalKilometros = value;
                RaisePropertyChanged("TotalKilometros");
            }
        }

        public int TotalMinutos
        {
            get { return _totalMinutos; }
            set
            {
                _totalMinutos = value;
                RaisePropertyChanged("TotalMinutos");
            }
        }


        public int NumeroUsos
        {
            get { return _numeroUsos; }
            set
            {
                _numeroUsos = value;
                RaisePropertyChanged("NumeroUsos");
            }
        }

        public string Celular
        {
            get { return _celular; }
            set
            {
                _celular = value;
                RaisePropertyChanged("Celular");
            }
        }

        public string Telefono
        {
            get { return _telefono; }
            set
            {
                _telefono = value;
                RaisePropertyChanged("Telefono");
            }
        }

        public string Email
        {
            get { return _email; }
            set
            {
                _email = value;
                RaisePropertyChanged("Email");
            }
        }
        public string Identificacion
        {
            get { return _identificacion; }
            set
            {
                _identificacion = value;
                RaisePropertyChanged("Identificacion");
            }
        }

        public string Nombre
        {
            get { return _nombre; }
            set 
            {
                _nombre = value;
                RaisePropertyChanged("Nombre");
            }
        }

        public ObservableCollection<VistaHistoriaCliente> Historia
        {
            get { return _historia; }
            set 
            {
                _historia = value;
                RaisePropertyChanged("Historia");
            }
        }

        public Guid IdCliente
        {
            get { return _idCliente; }
            set
            {
                _idCliente = value;
                RaisePropertyChanged("IdCliente");
            }
        }
        public Visibility MostrarBuscarCliente
        {
            get { return _mostrarBuscarCliente; }
            set 
            {
                _mostrarBuscarCliente = value;
                RaisePropertyChanged("MostrarBuscarCliente");
            }
        }
        #endregion

        #region  Métodos Públicos
        public override void Buscar()
        {
            
            if (IdCliente != null)
            {
                Procesando = true;
                BiciqContexto.VistaHistoriaClientes.Clear();

                BiciqContexto.Load(BiciqContexto.ConsultarHistoriaClienteQuery(IdCliente)).Completed += delegate
                {
                    Procesando = false;
                    Historia = new ObservableCollection<VistaHistoriaCliente>(BiciqContexto.VistaHistoriaClientes.OrderByDescending(h=>h.Fecha));
                    if (Historia.Count > 0)
                    {
                        var primerrecorrido = Historia.FirstOrDefault();
                        Nombre = primerrecorrido.NombresApellidos;
                        Identificacion = primerrecorrido.Identificacion;
                        Email = primerrecorrido.Email;
                        Telefono = primerrecorrido.Telefono;
                        Celular = primerrecorrido.Celular;

                        NumeroUsos = Historia.Count;
                        TotalKilometros = Historia.Sum(h => h.distancia.Value);
                        TotalMinutos = Historia.Sum(h => h.MinutosRecorrido.Value);

                        TotalSanciones = Historia.Where(h => h.TiempoSancion != null).Count();

                    }
                    else
                    {
                        AgregarMensajeInformacion("El Usuario seleccionado no tiene movimientos registrados");
                        MostrarErrores = Visibility.Visible;
                    }

                };
            }

        }
        #endregion

    }
}
